home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Samples / Media / UI / Annotated Hemisphere.fx next >
Encoding:
Text File  |  2004-09-27  |  5.0 KB  |  165 lines

  1. //
  2. // Hemisphere Lighting Model
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. //
  5. // Note: This effect file works with EffectEdit.
  6. //
  7.  
  8.  
  9. string XFile = "SkullOcc.x";                // model
  10. int    BCLR  = 0xff202080;                  // background
  11.  
  12. // light directions (view space)
  13. float3 DirFromLight < string UIName = "Light Direction"; > = {0.577, -0.577, 0.577};
  14.  
  15. // direction of light from sky (view space)
  16. float3 DirFromSky < string UIName = "Direction from Sky"; > = { 0.0f, -1.0f, 0.0f };            
  17.  
  18. // light intensity
  19. float4 I_a < string UIName = "Ambient Intensity";
  20.              string UIWidget = "Color";
  21.              float UIStep = 0.05;
  22.              string UIHelp = "The light intensity of the ambient lights";     
  23.         > = { 0.5f, 0.5f, 0.5f, 1.0f };    // ambient
  24. float4 I_b < string UIName = "Ground color";
  25.              string UIWidget = "Color";
  26.              float UIStep = 0.05;
  27.              string UIHelp = "The color of the ground";     
  28.         > = { 0.1f, 0.0f, 0.0f, 1.0f };    // ground
  29. float4 I_c < string UIName = "Sky Color";
  30.              string UIWidget = "Color";
  31.              float UIStep = 0.05;
  32.              string UIHelp = "The color of the sky";     
  33.         > = { 0.9f, 0.9f, 1.0f, 1.0f };    // sky
  34. float4 I_d < string UIName = "Diffuse Intensity";
  35.              string UIWidget = "Color";
  36.              float UIStep = 0.05;
  37.              string UIHelp = "The light intensity of the diffuse lights";     
  38.         > = { 1.0f, 0.9f, 0.8f, 1.0f };    // diffuse
  39. float4 I_s < string UIName = "Specular Intensity";
  40.              string UIWidget = "Color";
  41.              float UIStep = 0.05;
  42.              string UIHelp = "The light intensity of the specular lights";     
  43.         > = { 1.0f, 1.0f, 1.0f, 1.0f };    // specular
  44.  
  45. // material reflectivity
  46. float4 k_a < string UIName = "Ambient Color";
  47.              string UIWidget = "Color";
  48.              float UIStep = 0.05;
  49.              string UIHelp = "Material Ambient Color";     
  50.         > = { 0.8f, 0.8f, 0.8f, 1.0f };    // ambient
  51. float4 k_d < string UIName = "Diffuse Color";
  52.              string UIWidget = "Color";
  53.              float UIStep = 0.05;
  54.              string UIHelp = "Material Diffuse Color";     
  55.         > = { 0.4f, 0.4f, 0.4f, 1.0f };    // diffuse
  56. float4 k_s < string UIName = "Specular Color";
  57.              string UIWidget = "Color";
  58.              float UIStep = 0.05;
  59.              string UIHelp = "Material Specular Color";     
  60.         > = { 0.1f, 0.1f, 0.1f, 1.0f };    // specular
  61. float  n  < string UIName = "Specular Power";
  62.              string UIWidget = "Numeric";
  63.              float UIStep = 1;
  64.              string UIHelp = "Specular Power";     
  65.         > = 32.0f;                         // power
  66.  
  67.  
  68. // transformations
  69. float4x4 WorldView  : WORLDVIEW;
  70. float4x4 Projection : PROJECTION;
  71.  
  72. struct VS_OUTPUT
  73. {
  74.     float4 Pos  : POSITION;
  75.     float4 Diff : COLOR0;
  76.     float4 Spec : COLOR1;
  77. };
  78.  
  79. VS_OUTPUT VS(
  80.     float3 Pos  : POSITION, 
  81.     float3 Norm : NORMAL, 
  82.     float  Occ  : TEXCOORD0,
  83.     uniform bool bHemi, 
  84.     uniform bool bDiff,
  85.     uniform bool bSpec)
  86. {
  87.     VS_OUTPUT Out = (VS_OUTPUT)0;
  88.  
  89.     float3 L = -DirFromLight;                               // diffuse direction
  90.     float3 Y = -DirFromSky;                                 // hemisphere up axis
  91.     float3 P = mul(float4(Pos, 1), (float4x3)WorldView);    // position (view space)
  92.     float3 N = normalize(mul(Norm, (float3x3)WorldView));   // normal (view space)
  93.     float3 R = normalize(2 * dot(N, L) * N - L);            // reflection vector (view space)
  94.     float3 V = -normalize(P);                               // view direction (view space)
  95.  
  96.     float4 Amb  = k_a * I_a;
  97.     float4 Hemi = k_a * lerp(I_b, I_c, (dot(N, Y) + 1) / 2) * (1 - Occ);
  98.     float  temp = 1 - max(0, dot(N, L));
  99.     float4 Diff = k_d * I_d * (1 - temp * temp);
  100.     float4 Spec = k_s * I_s * pow(max(0, dot(R, V)), n/4);
  101.     float4 Zero = 0;
  102.  
  103.     Out.Pos  = mul(float4(P, 1), Projection);               // position (projected)
  104.     Out.Diff = (bDiff ? Diff : 0)
  105.              + (bHemi ? Hemi : Amb);                        // diffuse + ambient/hemisphere
  106.     Out.Spec = (bSpec ? Spec : 0);                          // specular
  107.  
  108.     return Out;
  109. }
  110.  
  111. technique THemisphereDiffuseSpecular
  112. {
  113.     pass P0
  114.     {
  115.         VertexShader = compile vs_1_1 VS(true, true, true);
  116.  
  117.         SpecularEnable = TRUE;
  118.     }
  119. }
  120.  
  121. technique THemisphereDiffuse
  122. {
  123.     pass P0
  124.     {
  125.         VertexShader = compile vs_1_1 VS(true, true, false);
  126.     }
  127. }
  128.  
  129.  
  130. technique THemisphere
  131. {
  132.     pass P0
  133.     {
  134.         VertexShader = compile vs_1_1 VS(true, false, false);
  135.     }
  136. }
  137.  
  138.  
  139. technique TAmbient
  140. {
  141.     pass P0
  142.     {
  143.         VertexShader = compile vs_1_1 VS(false, false, false);
  144.     }
  145. }
  146.  
  147. technique TAmbientDiffuse
  148. {
  149.     pass P0
  150.     {
  151.         VertexShader = compile vs_1_1 VS(false, true, false);
  152.     }
  153. }
  154.  
  155. technique TAmbientDiffuseSpecular
  156. {
  157.     pass P0
  158.     {
  159.         VertexShader = compile vs_1_1 VS(false, true, true);
  160.  
  161.         SpecularEnable = TRUE;
  162.     }
  163. }
  164.  
  165.